package controller

import (
	"fmt"
	"gg_server/db"
	"gg_server/model"
	"gg_server/response"
	"gg_server/util"
	"net/http"

	"github.com/gin-gonic/gin"
)

// 用户
type User struct{}

var UserController *User

func init() {
	UserController = &User{}
}

// 修改用户信息
func (u *User) Update(ctx *gin.Context) {
	type userInfo struct {
		// 用户姓名
		Name string `json:"name"`
		// 用户性别
		Sex int8 `json:"sex"`
		// 用户个性签名
		Individuality string `json:"individuality"`
	}

	var uInfo userInfo

	if err := ctx.Bind(&uInfo); err != nil {
		response.GetError().ParameterError("参数不完整")
	}

	if uInfo.Sex == 0 || len(uInfo.Name) < 3 || uInfo.Individuality == "" {
		response.GetError().ParameterError("参数不完整")
	}

	// 获取修改消息的用户id
	user_id := ctx.GetInt("id")

	// 创建修改用户信息结构体
	user := model.User{
		Id: user_id,
	}

	result := db.CreateSQLDB().Model(&user).Updates(map[string]interface{}{
		"name":          uInfo.Name,
		"sex":           uInfo.Sex,
		"individuality": uInfo.Individuality,
	})
	if result.Error != nil {
		response.GetError().ServerError(fmt.Sprint("未知的错误,err:", result.Error))
	}

	// 查找 更新后的信息
	db.CreateSQLDB().Find(&user)

	response.SendSuccessMsg(ctx, &response.SuccessMsg{
		Code: http.StatusOK,
		Msg:  "操作成功",
		Data: gin.H{
			"user": user,
		},
	})
}

// 修改用户密码
func (u *User) UpdatePwd(ctx *gin.Context) {
	password, b := ctx.GetPostForm("password")
	if !b {
		response.GetError().ParameterError("参数不完整")
	}
	newPassword, b := ctx.GetPostForm("newPassword")
	if !b {
		response.GetError().ParameterError("参数不完整")
	}

	fmt.Println(password, newPassword)
	// 获取修改消息的用户id
	user_id := ctx.GetInt("id")
	// 创建用户结构体
	user := model.User{
		Id: user_id,
	}
	db.CreateSQLDB().Find(&user)

	fmt.Println(util.GetMd5String(password))
	// 判断密码是否正确
	if util.GetMd5String(password) != user.Password {
		response.GetError().ForbiddenError("密码错误")
		return
	}

	// 密码正确
	user.Password = util.GetMd5String(newPassword)
	db.CreateSQLDB().Save(&user)

	response.SendSuccessMsg(ctx, &response.SuccessMsg{
		Code: http.StatusOK,
		Msg:  "修改成功",
		Data: gin.H{},
	})
}

// 修改头像
func (u *User) UpdateAvatar(ctx *gin.Context) {
	avatar, err := ctx.FormFile("avatar")
	if err != nil {
		fmt.Println(err)
		// 返回错误
		response.GetError().ParameterError("没有上传图片")
		return
	}

	dst, src := util.Upload.GetUploadDst("image", avatar, &util.CheckImg)
	// 储存头像
	ctx.SaveUploadedFile(avatar, dst)

	id := ctx.GetInt("id")

	user := model.User{
		Id: id,
	}

	db.CreateSQLDB().Model(&user).Update("avatar", src)

	response.SendSuccessMsg(ctx, &response.SuccessMsg{
		Code: http.StatusOK,
		Msg:  "修改成功",
		Data: gin.H{
			"avatar": src,
		},
	})
}